#ifndef EXAMPLE_HPP
#define EXAMPLE_HPP

#include <string>
#include <vector>

namespace example {

/**
 * @brief 示例类，展示基本的C++类结构
 */
class Calculator {
public:
    /**
     * @brief 构造函数
     */
    Calculator();

    /**
     * @brief 析构函数
     */
    ~Calculator();

    /**
     * @brief 加法运算
     * @param a 第一个操作数
     * @param b 第二个操作数
     * @return 两数之和
     */
    int add(int a, int b) const;

    /**
     * @brief 减法运算
     * @param a 被减数
     * @param b 减数
     * @return 差
     */
    int subtract(int a, int b) const;

    /**
     * @brief 乘法运算
     * @param a 第一个因数
     * @param b 第二个因数
     * @return 积
     */
    int multiply(int a, int b) const;

    /**
     * @brief 除法运算
     * @param a 被除数
     * @param b 除数
     * @return 商
     * @throws std::invalid_argument 当除数为0时抛出
     */
    double divide(double a, double b) const;

    /**
     * @brief 计算数组的和
     * @param numbers 数字数组
     * @return 数组元素的总和
     */
    int sum(const std::vector<int> &numbers) const;

private:
    // 私有成员变量示例
    std::string name_;
};

/**
 * @brief 字符串工具类
 */
class StringUtils {
public:
    /**
     * @brief 将字符串转换为大写
     * @param str 输入字符串
     * @return 大写字符串
     */
    static std::string toUpper(const std::string &str);

    /**
     * @brief 将字符串转换为小写
     * @param str 输入字符串
     * @return 小写字符串
     */
    static std::string toLower(const std::string &str);

    /**
     * @brief 分割字符串
     * @param str 输入字符串
     * @param delimiter 分隔符
     * @return 分割后的字符串向量
     */
    static std::vector<std::string> split(const std::string &str, char delimiter);

    /**
     * @brief 去除字符串首尾空格
     * @param str 输入字符串
     * @return 去除空格后的字符串
     */
    static std::string trim(const std::string &str);
};

} // namespace example

#endif // EXAMPLE_HPP
